package cn.yitun.chat.yitunserverimbase.dao.system;

import cn.yitun.chat.yitunservercommonlib.crud.yitun.CrudDao;
import cn.yitun.chat.yitunservercommonlib.dataentity.dto.chart.ChartBodyDto;
import cn.yitun.chat.yitunservercommonlib.dataentity.dto.system.user.UserDto;
import cn.yitun.chat.yitunservercommonlib.dataentity.po.system.user.UserInfo;
import cn.yitun.chat.yitunservercommonlib.dataentity.vo.chart.ChartBodyVo;
import cn.yitun.chat.yitunservercommonlib.dataentity.vo.system.user.UserVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 系统用户表
 * @author chenyitun
 * @email chenyitun@163.com
 * @date 2020-05-27 14:43:51
 */
@Mapper
public interface UserDao extends CrudDao<UserDto, UserInfo, UserVo> {

	int absDel(Long id);

	int batchAbsDel(Long[] ids);

	/**
	 * 根据账号获取用户
	 * @param account
	 * @return
	 */
	UserVo getUserVoByAccount(@Param("account") String account);
	/**
	 * 根据账号获取用户
	 * @param account
	 * @return
	 */
	UserInfo getUserByAccount(@Param("account") String account);
	/**
	 * 根据邮箱获取用户
	 * @param email
	 * @return
	 */
	UserInfo getUserByEmail(@Param("email") String email);
	/**
	 * 根据账号获取用户id
	 * @param account
	 * @return
	 */
	Long getIdByAccount(@Param("account") String account);

	/**
	 * 通过uuid获取用户
	 * @param code
	 * @return
	 */
	UserVo getUserByCode(@Param("code") String code);
	/**
	 * 通过uuid获取用户id
	 * @param code
	 * @return
	 */
	Long getUserIdByCode(@Param("code") String code);

	/**
	 * 根据拥有者的用户id获取其所有的用户成员
	 * @param userId
	 * @return
	 */
	List<UserVo> getUserCategoryMemberUserListByUserId(@Param("userId") Long userId);

	/**
	 * 获取用户
	 * @param ids
	 * @return
	 */
	List<UserVo> getUserDataList(@Param("list") List<Long> ids);

	/**
	 * 根据群id，获取所有成员
	 * @param groupId
	 * @return
	 */
	List<UserVo> getGroupMemberUserDataListByGroupId(@Param("groupId") Long groupId);

	/**
	 * 更新密码
	 * @param id
	 * @param password
	 * @return
	 */
	int updatePassword(@Param("userId")Long id,@Param("password") String password);
	/**
	 * 更新用户类型
	 * @param id
	 * @param type
	 * @return
	 */
	int updateType(@Param("userId")Long id,@Param("type") String type);

	/**
	 * 修改头像
	 * @param id
	 * @param avatar
	 * @return
	 */
	int updateAvatar(@Param("userId")Long id,@Param("avatar") String avatar);

	/**
	 * 更新头
	 * @param id
	 * @param head
	 * @return
	 */
	int updateHead(@Param("userId")Long id,@Param("head") Long head);

	/**
	 * 更新聊天状态
	 * @param id
	 * @param chatOnline
	 * @return
	 */
	int updateChatOnlineStatus(@Param("userId")Long id,@Param("chatOnline") String chatOnline);

	/**
	 * 根用户id，获取他所在群的所有成员
	 * @param userId
	 * @return
	 */
	List<UserVo> getGroupMemberUserDataListByUserId(@Param("userId")Long userId);

	/**
	 *
	 * @param chartBobyDto
	 * @return
	 */
	List<ChartBodyVo> countAvgDate(ChartBodyDto chartBobyDto);
	/**
	 * 获取基数
	 * @param chartBobyDto
	 * @return
	 */
	int baseCountChart(ChartBodyDto chartBobyDto);

	/**
	 * 更新个人信息
	 * @param userDO
	 * @return
	 */
	int updatePersonal(UserDto userDO);

	/**
	 * 通过手机号获取用户
	 * @param mobile
	 * @return
	 */
    UserVo getUserVOByMobile(@Param("mobile") String mobile);

	/**
	 * 通过手机号获取用户
	 * @param mobile
	 * @return
	 */
    UserInfo getUserByMobile(@Param("mobile") String mobile);

	/**
	 * 通过邮箱获取用户
	 * @param email
	 * @return
	 */
    UserVo getUserVOByEmail(@Param("email") String email);

	/**
	 * 查找用户，不包括已经在用户relation中的人员
	 * @param userQuery
	 * @return
	 */
    List<UserVo> queryUserDataList(UserDto userQuery);
}
